home *** CD-ROM | disk | FTP | other *** search
/ Softwarová Záchrana 3 / Softwarova-zachrana-3.bin / Xteq X-Setup / xqdcXSP-Setup-EN.exe / {app} / plugins / XQ IE Silently Executed Files.xpl < prev    next >
Text File  |  2004-03-01  |  7KB  |  223 lines

  1. "FILE"="Xteq Systems X-Setup Plugin 5.0"
  2. "TYPE"="8"
  3. "COUNT"="2"
  4. "UIPATH 1"="Internet\Internet Explorer\Files&Folders"
  5. "UIPATH 2"="Virtual Paranoia\Security Related"
  6. "NAME"="Silently Executed Files"
  7. "VERSION"="1.04"
  8. "LANGUAGE"="VBScript"
  9. "TEXT 1"="Add"
  10. "TEXT 2"="Remove"
  11. "DESCRIPTION 1"=For every file that Internet Explorer downloads, you will be asked to open it directly or save it to disk. You might decide that some files should be started automatically after the download by selecting the checkbox inside the Internet Explorer dialog box.
  12. "DESCRIPTION 2"=When this checkbox is selected, you have created a "Silently Executed File". This means: If Internet Explorer comes across a filename with an extension that is marked with "Do not ask me again" checkbox, it will automatically start the program responsible for that file. 
  13. "DESCRIPTION 3"=Basically this is a good idea, but some programs automatically set this "Do not ask me again" flag and thus you never ever have the chance to decide if you maybe want to be asked if a file of that type is downloaded.
  14. "DESCRIPTION 4"=All entries in this list are marked "Do not ask me again" and thus are "Silently Executed Files". To add a file to this list and start it automatically, click the Add button. To have the dialog box that will ask you what to do with a file, select the entry in the list and click on the Remove button.
  15. "AUTHOR"="Xteq Systems"
  16. "CONTACTURL"="http://www.xteq.com"
  17. "COPYRIGHT"="Copyright ⌐ Xteq Systems - All Rights Reserved"
  18. "COMMENT 1"="Thanks to Pierre Szwarc for the idea!"
  19. "COMMENT 2"="check also: http://ntbugtraq.ntadvice.com/default.asp?pid=55&did=32"
  20.  
  21.  
  22.  
  23. sMainPath="HKLM\Software\Classes\"
  24. sEditFlags="\EditFlags"
  25.  
  26. dim iItems        'contains the total amount of the registry keys
  27.  
  28. dim aryItems()
  29. dim iRealItems    'contains the total amount of items!
  30.  
  31. 'Dim aryItems()    'contains the name of the Registry paths (direct files starting with ".")
  32. 'Dim aryItemsLoc() 'contains the registry location  (\ShellNew or \ShellNew-)
  33. 'Dim aryDesc()     'contains the description of the items
  34.  
  35.  
  36. Sub Plugin_Initialize 
  37.  if RegPathExists(sMainPath) then
  38.     iRealItems=0
  39.     Call ReadRegistry
  40.  else
  41.     Call Disable
  42.  end if
  43. End Sub
  44.  
  45.  
  46. Sub ReadRegistry
  47.     for i=1 to iRealItems
  48.         Call SetUIElement(i,"")
  49.     next
  50.  
  51.     iRealItems=0
  52.     ReDim aryItems(505) 'hard coded!
  53.  
  54.     l=1
  55.     e=1
  56.     iItems=RegEnumPaths(sMainPath) 
  57.  
  58.     sDebug=""
  59.     sItem=""
  60.     sRealFileType="" 
  61.     sRealFileTypeDesc=""
  62.     sDataVal=""
  63.  
  64.     'read all data from the path
  65.     For l=1 to iItems       
  66.         sItem=RegEnumElement(l)  
  67.  
  68.         if left(sItem,1)="." then               
  69.            'read the real file type
  70.            sRealFileType=RegReadValue(sMainPath & sItem & "\@")
  71.         
  72.            'get the value of edit flags from the real data type
  73.            sDataVal=RegReadValue(sMainPath & sRealFileType & sEditFlags)
  74.  
  75.            'get the desc 
  76.            sRealFileTypeDesc=RegReadValue(sMainPath & sRealFileType & "\@")
  77.            if len(sRealFileTypeDesc)=0 then
  78.               sRealFileTypeDesc=sRealFileType
  79.            end if
  80.  
  81.            'desc too long?
  82.            if len(sRealFileTypeDesc)>35 then
  83.               sRealFileTypeDesc=left(sRealFileTypeDesc,35) & "..."
  84.            end if
  85.  
  86.            'now check the data value
  87.            if len(sDataVal)>=6 then 'since we are interessted in the third bit xxYYzz = 6 chars
  88.               if mid(sDataVal,5,2)="01" then
  89.                  iRealItems=iRealItems+1
  90.                  if iRealItems>504 then exit sub 'hard coded II
  91.  
  92.                  aryItems(iRealItems)=sRealFileType
  93.  
  94.                  Call SetUIElement(iRealItems,sITEM & " - " & sRealFileTypeDesc )
  95.  
  96.               end if    
  97.            end if
  98.         end if
  99.  
  100.     next
  101.     'Call DebugMsg(sDebug)
  102.     Exit Sub
  103. End Sub
  104.  
  105.  
  106. 'VERSION 1.1
  107. 'returns the readable description for a file TYPE. Input is the
  108. 'raw file type (e.g. ".TXT"). 
  109. Function GetFileDescription(DotType)
  110.   sxd_BasePath="HKLM\Software\Classes\"
  111.  
  112.   sxd_Path=sxd_BasePath & DotType & "\@"
  113.   sxd_Val=RegReadValue(sxd_Path)
  114.  
  115.   if IsEmpty(sxd_Val)=true then
  116.      'extended description not found! return default
  117.      GetFileDescription="<UNKNOWN>"
  118.   else
  119.      'found, now get the "real" description
  120.      sxd_Path=sxd_BasePath & sxd_Val & "\@"
  121.      sxd_Name=RegReadValue(sxd_Path)
  122.      
  123.      if IsEmpty(sxd_Name)=true then
  124.         'argh! 
  125.         GetFileDescription="<UNKNOWN>"
  126.      else
  127.         GetFileDescription=sxd_Name
  128.      end if
  129.   end if
  130.  
  131. End Function
  132.  
  133. Sub PatchEditFlags(Path,ActivateIt)
  134.  sP=Path & sEditFlags
  135.  iType=RegValueType(sP)
  136.  if iType<>3 then
  137.     Call MsgError("Unable to change Registry Path <" & sP & "> since the value type is not REG_BINARY. I am sorry that it did not work.")
  138.  else
  139.     sVal=CStr(RegReadValue(sP))
  140.     sNewVal=""
  141.  
  142.     if len(sVal)>=4 then
  143.        sNewVal=cstr(left(sVal,4))
  144.     end if
  145.  
  146.     if Len(sNewVal)=0 then
  147.        sNewVal="0000"
  148.     end if
  149.  
  150.     if ActivateIt=true then
  151.        sNewVal=sNewVal & "01"
  152.     else
  153.        sNewVal=sNewVal & "00"
  154.     end if
  155.  
  156.     if len(sVal)>=7 then
  157.        sNewVal=sNewVal & Mid(sVal,7,len(sVal)-6)
  158.     end if
  159.  
  160.     Call RegWriteValue(sP,sNewVal,3)
  161.  end if
  162.  
  163.  
  164. end sub
  165.  
  166.  
  167.  
  168. Sub Plugin_Apply(ElementIndex,ElementSubIndex)
  169.  bChanged=false
  170.  
  171.     if ElementIndex=1 then 'add
  172.        s=InputWindow("Please enter the extension (without ┤.┤) that should be executed without warning from Internet Explorer. For example, enter ┤DOC`",s,1) 
  173.        if IsEmpty(s)=false then
  174.           if len(s)>1 then 
  175.              sPath=sMainPath & "." & s & "\@" 
  176.              sRealName=RegReadValue(sPath)
  177.              if len(sRealName)>0 then 
  178.                 if RegPathExists(sMainPath & sRealName) then
  179.                    Call PatchEditFlags(sMainPath & sRealName,true)
  180.                    bChanged=true
  181.  
  182.                    Call MsgInformation("Extension added, you will find the entry inside the list.")
  183.                 else 
  184.                    Call MsgError("Unable to add this extension since the real name for this extension could not be located inside the registry.")
  185.                 end if
  186.              else
  187.                 Call MsgError("Unable to add this extension as it is not linked to a program.")
  188.              end if
  189.  
  190.  
  191.           end if 
  192.        end if
  193.  
  194.     end if
  195.  
  196.  
  197.     if ElementIndex=2 then 'delete
  198.        if ElementSubIndex>0 then
  199.           s=aryItems(ElementSubIndex)   
  200.           Call PatchEditFlags(sMainPath & s,false)
  201.           Call MsgInformation("Entry removed")
  202.  
  203.           bChanged=true
  204.        else
  205.           Call MsgWarning("Please select an item in the list.")
  206.        end if
  207.     end if
  208.      
  209.  
  210.     if bChanged=true then
  211.        're-read UI
  212.        Call ReadRegistry
  213.     end if
  214.  
  215.  
  216. end sub
  217.  
  218.  
  219.  
  220.  
  221. Sub Plugin_Terminate 
  222. End Sub
  223.